home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / gfx / misc / gnuplot-3.7src.lha / gnuplot-3.7src / gnuplot-3.7.lha / gnuplot-3.7 / term / rgip.trm < prev    next >
Text File  |  1998-12-14  |  16KB  |  621 lines

  1. /*
  2.  * $Id: rgip.trm,v 1.16 1998/04/14 00:18:06 drd Exp $
  3.  */
  4.  
  5. /* GNUPLOT - rgip.trm Uniplex graphics metafile */
  6.  
  7. /*[
  8.  * Copyright 1990 - 1993, 1998
  9.  *
  10.  * Permission to use, copy, and distribute this software and its
  11.  * documentation for any purpose with or without fee is hereby granted,
  12.  * provided that the above copyright notice appear in all copies and
  13.  * that both that copyright notice and this permission notice appear
  14.  * in supporting documentation.
  15.  *
  16.  * Permission to modify the software is granted, but not the right to
  17.  * distribute the complete modified source code.  Modifications are to
  18.  * be distributed as patches to the released version.  Permission to
  19.  * distribute binaries produced by compiling modified sources is granted,
  20.  * provided you
  21.  *   1. distribute the corresponding source modifications from the
  22.  *    released version in the form of a patch file along with the binaries,
  23.  *   2. add special version identification to distinguish your version
  24.  *    in addition to the base release version number,
  25.  *   3. provide your name and address as the primary contact for the
  26.  *    support of your modified version, and
  27.  *   4. retain our contact information in regard to use of the base
  28.  *    software.
  29.  * Permission to distribute the released version of the source code along
  30.  * with corresponding source modifications in the form of a patch file is
  31.  * granted with same provisions 2 through 4 for binary distributions.
  32.  *
  33.  * This software is provided "as is" without express or implied warranty
  34.  * to the extent permitted by applicable law.
  35. ]*/
  36.  
  37. /*
  38.  * This file is included by ../term.c.
  39.  *
  40.  * This terminal driver supports:
  41.  *   RGIP metafile
  42.  *
  43.  * AUTHORS
  44.  *   Hans Olav Eggestad
  45.  *
  46.  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
  47.  *
  48.  */
  49.  
  50. /*
  51.  * Original for direct RGIP Metafile output.
  52.  */
  53. /* 
  54.  * Max pixels for X and Y in one window is 10000.
  55.  */
  56. /*
  57.  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
  58.  */
  59.  
  60. #include "driver.h"
  61.  
  62. #ifdef TERM_REGISTER
  63. register_term(rgip)
  64. register_term(uniplex)
  65. #endif
  66.  
  67. #ifdef TERM_PROTO
  68. TERM_PUBLIC void RGIP_init __PROTO((void));
  69. TERM_PUBLIC void RGIP_graphics __PROTO((void));
  70. TERM_PUBLIC void RGIP_text __PROTO((void));
  71. TERM_PUBLIC void RGIP_linetype __PROTO((int lt));
  72. TERM_PUBLIC void RGIP_move __PROTO((unsigned int x, unsigned int y));
  73. TERM_PUBLIC void RGIP_vector __PROTO((unsigned int ux, unsigned int uy));
  74. TERM_PUBLIC int RGIP_text_angle __PROTO((int ang));
  75. TERM_PUBLIC int RGIP_justify_text __PROTO((enum JUSTIFY mode));
  76. TERM_PUBLIC void RGIP_put_text __PROTO((unsigned int x, unsigned int y, char *str));
  77. TERM_PUBLIC void RGIP_reset __PROTO((void));
  78. TERM_PUBLIC void RGIP_do_point __PROTO((unsigned int x, unsigned int y, int number));
  79. TERM_PUBLIC void RGIP_options __PROTO((void));
  80. #define RGIP_X_MAX 10000
  81. #define RGIP_Y_MAX 6700
  82.  
  83. #define RGIP_FONTSIZE 1
  84. #define RGIP_SC (300)
  85. #define RGIP_XMAX 9900
  86. #define RGIP_YMAX 6600
  87. #define RGIP_HTIC (100)
  88. #define RGIP_VTIC (100)
  89. #define RGIP_VCHAR (RGIP_FONTSIZE*RGIP_SC)
  90. #define RGIP_HCHAR (RGIP_VCHAR*3/7)
  91. #endif /* TERM_PROTO */
  92.  
  93. #ifndef TERM_PROTO_ONLY
  94. #ifdef TERM_BODY
  95.  
  96.  
  97. void RGIP_write_poly __PROTO((void));
  98. static unsigned char *RGIP_cvts __PROTO((unsigned char *str, int *lcnt));
  99. /* static void RGIP_setfont __PROTO((int sz)); */
  100.  
  101. #include <sys/types.h>
  102. #include <sys/stat.h>
  103.  
  104. #define RGIPDOTS 0
  105. #define RGIPMARK 1
  106. #define RGIPTEXT 2
  107. #define RGIPLINE 3
  108. #define RGIPPOLY 4
  109. #define RGIP_MAX_POLY 250
  110. static char *RGIP_Obj[6] =
  111. {"DOTS", "MARK", "TEXT", "LINE", "POLY"};
  112.  
  113. /* 
  114.  * RGIP fontsises range from 1 to 8 
  115.  */
  116.  
  117. #define RGIP_FACES 3
  118. #define RGIP_FSTYLES 4
  119. #define RGIP_FSIZES 8
  120. #define RGIP_HELVETICA 0
  121. #define RGIP_TIMES 1
  122. #define RGIP_COURIER 2
  123. #define RGIP_LINE_WIDTHS 8    /* future, currently invisible and visible 0
  124.                    and 1 */
  125. #define RGIP_LINE_TYPES 8
  126. #define RGIP_COLORS 16
  127. #define RGIP_POINT_TYPES 8
  128.  
  129.  
  130.  
  131.  
  132. static int RGIP_orgX;        /* absolute-pixel-ORIgin of graph.      */
  133. static int RGIP_orgY;
  134. static int RGIP_orgx;        /* absolute-pixel-ORIgin of current plot. */
  135. static int RGIP_orgy;
  136. static int RGIP_posx;        /* current drawing position (lines).    */
  137. static int RGIP_posy;
  138. /* static int RGIP_inplot; */
  139. static int RGIP_xmax = RGIP_XMAX;    /* width of graph in pixels.         */
  140. static int RGIP_ymax = RGIP_YMAX;    /* height of graph in pixels.        */
  141. static int RGIP_winx = RGIP_XMAX;    /* width of graph in pixels.         */
  142. static int RGIP_winy = RGIP_YMAX;    /* height of graph in pixels.        */
  143. /* static int RGIP_blofs; */            /* BaseLine OFfSet from bounding box.*/
  144. static int RGIP_angle = 0;    /* 0 for horizontal text, 90 for vertical */
  145. static int RGIP_portrait = 0;    /* 0 for horizontal text, 90 for vertical */
  146. static enum JUSTIFY RGIP_justify = LEFT;    /* left/center/right */
  147. static int RGIP_fface = 2;    /* Times */
  148. static int RGIP_ftype = 1;    /* style roman */
  149. static int RGIP_fontsize = RGIP_FONTSIZE;    /*  */
  150. static int RGIP_tcol = 7;    /* text color */
  151. static int RGIP_lsty = 1;    /* line style */
  152. static int RGIP_lcol = 7;    /* line color */
  153. static int RGIP_lwid = 1;    /* line width */
  154. static int RGIP_fsty = 8;    /* fill style */
  155. static int RGIP_fcol = 8;    /* fill color */
  156. static int RGIP_mcol = 7;    /* marker color */
  157. static int RGIP_msty = 1;    /* marker style */
  158. static int RGIP_msize = 1;    /* marker size */
  159.  
  160. static int RGIP_win_horiz = 1;
  161. static int RGIP_win_verti = 1;
  162. static int RGIP_plot_nr = 0;
  163.  
  164. unsigned int RGIP_vecpos;
  165. unsigned int RGIP_xvector[RGIP_MAX_POLY];
  166. unsigned int RGIP_yvector[RGIP_MAX_POLY];
  167. static unsigned char *RGIP_cvts();
  168.  
  169.  
  170. TERM_PUBLIC void RGIP_init()
  171. {
  172.     register struct termentry *t = term;
  173.  
  174.     RGIP_posx = RGIP_posy = 0;
  175.  
  176.     if (RGIP_portrait) {
  177.     RGIP_orgX = (RGIP_Y_MAX - RGIP_YMAX) / 2;
  178.     RGIP_orgY = (RGIP_X_MAX - RGIP_XMAX) / 2;
  179.     RGIP_xmax = RGIP_winx = (int) (RGIP_YMAX / RGIP_win_horiz);
  180.     RGIP_ymax = RGIP_winy = (int) (RGIP_XMAX / RGIP_win_verti);
  181.     } else {
  182.     RGIP_orgX = (RGIP_X_MAX - RGIP_XMAX) / 2;
  183.     RGIP_orgY = (RGIP_Y_MAX - RGIP_YMAX) / 2;
  184.     RGIP_xmax = RGIP_winx = (int) (RGIP_XMAX / RGIP_win_horiz);
  185.     RGIP_ymax = RGIP_winy = (int) (RGIP_YMAX / RGIP_win_verti);
  186.     }
  187.  
  188.     t->xmax = (unsigned int) (RGIP_xmax);
  189.     t->ymax = (unsigned int) (RGIP_ymax);
  190.  
  191.     RGIP_vecpos = 0;
  192. }
  193.  
  194. TERM_PUBLIC void RGIP_graphics()
  195. {
  196.     static int Gnr = 0;
  197.     struct stat buf;
  198.     unsigned char *p, fn[128];
  199.  
  200.     int tmpx, tmpy;
  201.     /*    int xoff, yoff; */
  202.  
  203.     if (RGIP_vecpos) {
  204.     RGIP_write_poly();
  205.     }
  206.     if (!Gnr || RGIP_plot_nr >= (RGIP_win_horiz * RGIP_win_verti)) {
  207.     fstat(fileno(gpoutfile), &buf);
  208.     if (S_ISREG(buf.st_mode)) {
  209.         if (outstr && (p = (unsigned char *) strchr(outstr, 'X'))) {
  210.                 /* substitute X with graphnr */
  211.          if (!Gnr) {    /* delete the base file */
  212.             unlink(outstr);    /* should we close it first ? ? ? */
  213.         } else {
  214.             fputs("%RI_GROUPEND\n", gpoutfile);
  215.             fclose(gpoutfile);
  216.         }
  217.         *p = NUL;
  218.         sprintf(fn, "%s%1d%s", outstr, ++Gnr, p + 1);
  219.         if ((gpoutfile = fopen(fn, "w")) == (FILE *) NULL) {
  220.             os_error("cannot reopen file with binary type; output unknown",
  221.                  NO_CARET);
  222.         }
  223.         *p = 'X';    /* put back X */
  224.         }
  225.     }
  226.     fprintf(gpoutfile, "\
  227. %RGIP_METAFILE: 1.0a\n\
  228. %RI_GROUPSTART\n\
  229. 0 0 %d %d SetWindow\n\
  230. 100 100 %d %d 10 1 7 1 8 BOX\n",
  231.         (RGIP_portrait) ? RGIP_Y_MAX : RGIP_X_MAX,
  232.         (RGIP_portrait) ? RGIP_X_MAX : RGIP_Y_MAX,
  233.         (RGIP_portrait) ? RGIP_YMAX : RGIP_XMAX,
  234.         (RGIP_portrait) ? RGIP_XMAX : RGIP_YMAX);
  235.     RGIP_plot_nr = 0;
  236.     } else {
  237.     fputs("%RI_GROUPEND\n", gpoutfile);
  238.     }
  239.     fputs("%RI_GROUPSTART\n", gpoutfile);
  240.     RGIP_plot_nr++;
  241.     /* Gnr++; */
  242.     tmpx = RGIP_orgX + ((RGIP_plot_nr - 1) % RGIP_win_horiz) * RGIP_winx;
  243.     tmpy = RGIP_orgY + ((RGIP_win_verti - 1) - (int) ((RGIP_plot_nr - 1) / RGIP_win_horiz)) * RGIP_winy;
  244.     RGIP_orgx = tmpx + (int) ((RGIP_winx - RGIP_xmax) / 2);
  245.     RGIP_orgy = tmpy + (int) ((RGIP_winy - RGIP_ymax) / 2);
  246.  
  247.  
  248.     /* RGIP_linetype(-1); */
  249. }
  250.  
  251. TERM_PUBLIC void RGIP_text()
  252. {
  253. }
  254.  
  255. TERM_PUBLIC void RGIP_linetype(lt)
  256. int lt;
  257. {
  258. /*    int pen, pattern; */
  259.  
  260.     if (RGIP_vecpos) {
  261.     RGIP_write_poly();
  262.     }
  263. /*  -2: axis
  264.  *  -1: border
  265.  *   0: arrow
  266.  *   1-7: graph
  267. */
  268.     if (lt == -2) {
  269.     lt = 1;
  270.     RGIP_lwid = 5;
  271.     } else if (lt == -1) {
  272.     lt = 5;
  273.     RGIP_lwid = 2;
  274.     } else {
  275.     RGIP_lwid = (int) (lt / RGIP_LINE_TYPES);
  276.     if (RGIP_lwid < 1)
  277.         RGIP_lwid = 1;
  278.     RGIP_lwid *= 2;
  279.     lt = (lt % RGIP_LINE_TYPES) + 1;
  280.     }
  281.     fputs("%RI_GROUPEND\n\
  282. %RI_GROUPSTART\n", gpoutfile);
  283.  
  284.     /* RGIP_lsty  = (lt == 0 || lt == 2) ? 1 : lt; */
  285.  
  286.     RGIP_lsty = lt;
  287. }
  288.  
  289.  
  290. TERM_PUBLIC void RGIP_move(x, y)
  291. unsigned int x, y;
  292. {
  293. /*
  294.     fputs("%RI_GROUPEND\n", gpoutfile);
  295.     fputs("%RI_GROUPSTART\n", gpoutfile);
  296. */
  297.     if (RGIP_vecpos) {
  298.     RGIP_write_poly();
  299.     }
  300.     RGIP_xvector[0] = x + RGIP_orgx;
  301.     RGIP_yvector[0] = y + RGIP_orgy;
  302.     RGIP_vecpos = 1;
  303.     /*
  304.        RGIP_posx = x;
  305.        RGIP_posy = y;
  306.      */
  307. }
  308.  
  309.  
  310. TERM_PUBLIC void RGIP_vector(ux, uy)
  311. unsigned int ux, uy;
  312. {
  313.     /* store polygon-node */
  314.  
  315.     RGIP_xvector[RGIP_vecpos] = ux + RGIP_orgx;
  316.     RGIP_yvector[RGIP_vecpos] = uy + RGIP_orgy;
  317.     RGIP_vecpos++;
  318.     if (RGIP_vecpos >= RGIP_MAX_POLY) {
  319.     RGIP_write_poly();
  320.     RGIP_xvector[RGIP_vecpos] = ux + RGIP_orgx;
  321.     RGIP_yvector[RGIP_vecpos] = uy + RGIP_orgy;
  322.     RGIP_vecpos++;
  323.     }
  324. }
  325.  
  326. void RGIP_write_poly()
  327. {
  328.     register int i;
  329.  
  330.     putc('[', gpoutfile);
  331.     for (i = 0; i < RGIP_vecpos; i++) {
  332.     if (!(i % 8))
  333.         putc('\n', gpoutfile);
  334.     fprintf(gpoutfile, " %1d\
  335.  %1d",
  336.         RGIP_xvector[i],
  337.         RGIP_yvector[i]);
  338.     }
  339.     RGIP_vecpos = 0;
  340.     putc(']', gpoutfile);
  341.  
  342.     fprintf(gpoutfile, " %1d %d %1d %1d %1d %s\n", RGIP_lwid, RGIP_lsty,
  343.         RGIP_lcol, RGIP_fsty, RGIP_fcol, RGIP_Obj[RGIPPOLY]);
  344.  
  345.     /*
  346.        RGIP_posx = ux;
  347.        RGIP_posy = uy;
  348.      */
  349.     /* RGIP_move(ux, uy); */
  350. }
  351.  
  352.  
  353. TERM_PUBLIC int RGIP_text_angle(ang)
  354. int ang;
  355. {
  356.     if (RGIP_vecpos) {
  357.     RGIP_write_poly();
  358.     }
  359.     if (RGIP_angle != ang) {
  360.     RGIP_angle = ang;    /* record for later use */
  361.     }
  362.     return (TRUE);
  363. }
  364.  
  365. TERM_PUBLIC int RGIP_justify_text(mode)
  366. enum JUSTIFY mode;
  367. {
  368.     if (RGIP_vecpos) {
  369.     RGIP_write_poly();
  370.     }
  371.     RGIP_justify = mode;
  372.     return (TRUE);
  373. }
  374.  
  375. static unsigned char *RGIP_cvts(str, lcnt)
  376. unsigned char *str;
  377. int *lcnt;            /* lines */
  378. {
  379.     unsigned char *cp1;
  380.     unsigned char *cp2;
  381.     static unsigned char *buf = NULL;
  382.     int lc = 1;
  383.  
  384.     lc = 1;
  385.     /* Free up old buffer, if there is one, get a new one.  Since       */
  386.     /* all transformations shorten the string, get a buffer that is     */
  387.     /* the same size as the input string.                               */
  388.  
  389.     if (buf != NULL)
  390.     (void) free(buf);
  391.     buf = (unsigned char *) gp_alloc(strlen(str), "converted label string");
  392.  
  393.     /* Do the transformations. */
  394.  
  395.     cp1 = str;
  396.     cp2 = buf;
  397.     while (strlen(cp1) > 0) {
  398.     switch (*cp1) {
  399.     case '\\':        /* Escape sequence. */
  400.         if (*++cp1 == '\\') {
  401.         /* Begin new line. */
  402.         *cp2++ = '\n';
  403.         lc++;
  404.         break;
  405.         }
  406.     case '(':
  407.         *cp2++ = '\\';
  408.         *cp2++ = '(';
  409.         break;
  410.     case ')':
  411.         *cp2++ = '\\';
  412.         *cp2++ = ')';
  413.         break;
  414.         /* Fall through to just copy next char out. */
  415.  
  416.     default:
  417.         *cp2++ = *cp1;
  418.         break;
  419.     }
  420.     cp1++;
  421.     }
  422.  
  423.     *cp2++ = '\n';
  424.     *cp2 = NUL;
  425.     *lcnt = lc;
  426.     return (buf);
  427. }
  428.  
  429. TERM_PUBLIC void RGIP_put_text(x, y, str)
  430. unsigned int x, y;        /* reference point of string */
  431. char *str;            /* the text */
  432. {
  433.     register struct termentry *t = term;
  434.     unsigned char *cvstr, *p;
  435.     int xlines;            /* lines */
  436.  
  437.     if (RGIP_vecpos) {
  438.     RGIP_write_poly();
  439.     }
  440.     cvstr = RGIP_cvts(str, &xlines);
  441.  
  442.     x += RGIP_orgx,
  443.     y += RGIP_orgy;
  444.  
  445.     if (!RGIP_angle) {        /* horisontal */
  446.     y += (int) (t->v_char) * (xlines - 2) / 2;
  447.     /* y += (t->v_char)*xlines; */
  448.     y += (int) (t->v_char) / 4;
  449.     } else {
  450.     x -= (int) (t->v_char) * (xlines - 2) / 2;
  451.     x -= (int) (t->v_char) / 4;
  452.     }
  453.  
  454.     while ((p = (unsigned char *) strchr(cvstr, '\n'))) {
  455.     *p = '\0';
  456.     if (strlen(cvstr))
  457.         fprintf(gpoutfile, "%1d %1d %1d  %1d (%s) %1d %1d %1d %1d %s\n",
  458.             x, y, RGIP_justify, RGIP_angle * 90, cvstr, RGIP_fface,
  459.             RGIP_ftype, RGIP_fontsize, RGIP_tcol, RGIP_Obj[RGIPTEXT]);
  460.     cvstr = ++p;
  461.     if (RGIP_angle) {    /* vertical */
  462.         x += (t->v_char);
  463.     } else {
  464.         y -= (t->v_char);
  465.     }
  466.     }
  467. }
  468.  
  469.  
  470. TERM_PUBLIC void RGIP_reset()
  471. {
  472.     if (RGIP_vecpos) {
  473.     RGIP_write_poly();
  474.     }
  475.     fputs("%RI_GROUPEND\n", gpoutfile);
  476.     /* fputs("%RI_GROUPEND\n", gpoutfile); */
  477. }
  478.  
  479. /* static void
  480. RGIP_setfont(sz)
  481.     int sz;
  482. {
  483.     RGIP_fontsize = (int) (sz);
  484.     if ( RGIP_fontsize < 1 ) RGIP_fontsize = 1;
  485.     term->v_char = (unsigned int)(RGIP_fontsize*RGIP_SC);
  486.     term->h_char = (unsigned int)(RGIP_fontsize*RGIP_SC*3/7);
  487. }
  488. */
  489.  
  490. TERM_PUBLIC void RGIP_do_point(x, y, number)
  491. unsigned int x, y;
  492. int number;
  493. {
  494.  
  495.     x += RGIP_orgx,
  496.     y += RGIP_orgy;
  497.  
  498.     if (number < 0) {        /* do dot */
  499.     fprintf(gpoutfile, "%1d %1d %1d %s\n",
  500.         x, y, RGIP_mcol, RGIP_Obj[RGIPDOTS]);
  501.     return;
  502.     }
  503.     RGIP_msty = (number % RGIP_POINT_TYPES) + 1;
  504.     RGIP_msize = ((int) (number / RGIP_POINT_TYPES)) + 1;
  505.  
  506.     fprintf(gpoutfile, "%1d %1d %1d %1d %1d %s\n",
  507.         x, y, RGIP_msize, RGIP_msty, RGIP_mcol, RGIP_Obj[RGIPMARK]);
  508. }
  509.  
  510. TERM_PUBLIC void RGIP_options()
  511. {
  512.     struct value a;
  513.  
  514.     while (!END_OF_COMMAND) {
  515.     if (almost_equals(c_token, "p$ortrait")) {
  516.         RGIP_portrait = TRUE;
  517.         c_token++;
  518.     } else if (almost_equals(c_token, "l$andscape")) {
  519.         RGIP_portrait = FALSE;
  520.         c_token++;
  521.     } else if (equals(c_token, "[")) {    /* windows spesified */
  522.         c_token++;
  523.         /* if (RGIP_plot_nr>1) */
  524.         if (equals(c_token, "]")) {
  525.         /* RGIP_page(); */
  526.         c_token++;
  527.         continue;
  528.         }
  529.         if (END_OF_COMMAND) {
  530.         int_error("no. windows: [horizontal,vertical] expected", c_token);
  531.         } else if (!equals(c_token, ",")) {
  532.         RGIP_win_horiz = (int) real(const_express(&a));
  533.         }
  534.         if (!equals(c_token, ","))
  535.         int_error("',' expected", c_token);
  536.         c_token++;
  537.         if (!equals(c_token, "]")) {
  538.         RGIP_win_verti = (int) real(const_express(&a));
  539.         }
  540.         if (!equals(c_token, "]"))
  541.         int_error("expecting ']'", c_token);
  542.         c_token++;
  543.     } else {
  544.         /* We have font size specified */
  545.         RGIP_fontsize = (int) real(const_express(&a));
  546.         if (RGIP_fontsize < 1)
  547.         RGIP_fontsize = 1;
  548.         term->v_char = (unsigned int) (RGIP_fontsize * RGIP_SC);
  549.         term->h_char = (unsigned int) (RGIP_fontsize * RGIP_SC * 3 / 7);
  550.     }
  551.     }
  552.     sprintf(term_options, "%s %d [%1d,%1d]",
  553.         (RGIP_portrait) ? "portrait" : "landscape",
  554.         RGIP_fontsize, RGIP_win_horiz, RGIP_win_verti);
  555. }
  556.  
  557. #endif /* TERM_BODY */
  558.  
  559. #ifdef TERM_TABLE
  560.  
  561. TERM_TABLE_START(rgip_driver)
  562.     "rgip", "RGIP metafile (Uniplex). Option: fontsize (1-8)",
  563.     RGIP_XMAX, RGIP_YMAX, RGIP_VCHAR, RGIP_HCHAR,
  564.     RGIP_VTIC, RGIP_HTIC, RGIP_options, RGIP_init, RGIP_reset,
  565.     RGIP_text, null_scale, RGIP_graphics, RGIP_move,
  566.     RGIP_vector, RGIP_linetype, RGIP_put_text, RGIP_text_angle,
  567.     RGIP_justify_text, RGIP_do_point, do_arrow, set_font_null
  568. TERM_TABLE_END(rgip_driver)
  569.  
  570. #undef LAST_TERM
  571. #define LAST_TERM rgip_driver
  572.  
  573. TERM_TABLE_START(uniplex_driver)
  574.     "uniplex", "RGIP metafile (Uniplex). Option: fontsize (1-8) (Same as rgip)",
  575.     RGIP_XMAX, RGIP_YMAX, RGIP_VCHAR, RGIP_HCHAR,
  576.     RGIP_VTIC, RGIP_HTIC, RGIP_options, RGIP_init, RGIP_reset,
  577.     RGIP_text, null_scale, RGIP_graphics, RGIP_move,
  578.     RGIP_vector, RGIP_linetype, RGIP_put_text, RGIP_text_angle,
  579.     RGIP_justify_text, RGIP_do_point, do_arrow, set_font_null
  580. TERM_TABLE_END(uniplex_driver)
  581.  
  582. #undef LAST_TERM
  583. #define LAST_TERM uniplex_driver
  584.  
  585. #endif /* TERM_TABLE */
  586. #endif /* TERM_PROTO_ONLY */
  587.  
  588. #ifdef TERM_HELP
  589. START_HELP(rgip)
  590. "1 rgip",
  591. "?commands set terminal rgip",
  592. "?set terminal rgip",
  593. "?set term rgip",
  594. "?terminal rgip",
  595. "?term rgip",
  596. "?rgip",
  597. "?commands set terminal uniplex",
  598. "?set terminal uniplex",
  599. "?set term uniplex",
  600. "?terminal uniplex",
  601. "?term uniplex",
  602. "?uniplex",
  603. " The `rgip` and `uniplex` terminal drivers support RGIP metafiles.  They can",
  604. " combine several graphs on a single page, but only one page is allowed in a",
  605. " given output file.",
  606. "",
  607. " Syntax:",
  608. "       set terminal rgip | uniplex {portrait | landscape}",
  609. "                                   {[<horiz>,<vert>]} {<fontsize>}",
  610. "",
  611. " permissible values for the font size are in the range 1--8, with the default",
  612. " being 1.  The default layout is landscape.  Graphs are placed on the page in",
  613. " a `horiz`x`vert` grid, which defaults to [1,1].",
  614. "",
  615. " Example:",
  616. "       set terminal uniplex portrait [2,3]",
  617. "",
  618. " puts six graphs on a page in three rows of two in portrait orientation."
  619. END_HELP(rgip)
  620. #endif /* TERM_HELP */
  621.